#!/bin/bash
# mover input output logOpcional

#input path del archivo que se desea mover. 

#output path hacia donde se mueve. 
###############################################################################
#		Codigo de salidas
#		=================
#	0....Se realizo la operacion
#	1....Cantidad de parametros recibidos no es 2 o 3
#	2....El archivo que se quiere mover no existe	 
#	3....El destino y el origen son iguales
#	4....El destino no existe
#
###############################################################################

###############################################################################
# Funcion validarCantParametros
#
## verifica que la canecho $PWDtidad de parametros recibidos por el comando sea 2 o 3
#
# en caso de que la cantidad de parametros no sea la esperada sale del comando 
# 	devolviendo 1
###############################################################################

function validarCantParametros(){
	if [ $1 -ne 2 ] 
	then
		if [ $1 -ne 3 ]
		then
			echo "Incorrecto empleo del comando mover."
			echo "La cantidad de parametros esperados son dos o tres."
			exit 1 
		fi	
	fi 
}



###############################################################################
# Funcion destinoOrigen
#
# si el comando que invoca a este otro tiene un archivo log, se escribira en el 
# 	mismo el resultado de la operacion 
#
# Parametros:
#	1 ruta del archivo que se quiere mover
#	2 nombre que tomara el archivo a mover
#	3 descripcion del mensaje
###############################################################################

function destinoOrigen(){
	
	local path_arch=`dirname "$1"` #borro nombre del arch

	if [ "$path_arch" = "$2" ]
	then
		echo "El destino y el origen son iguales. No se movio el archivo $1"
		escribirLog "$3" "W" "Mover: el archivo $1 no se movio. El directorio destino y origen son iguales."		
		exit 3
	fi
}


###############################################################################
# Funcion escribirLog
#
# si el comando que invoca a este otro tiene un archivo log, se escribira en el 
# 	mismo el resultado de la operacion 
#
# Parametros:
#	1 nombre del archivo log o cadena vacia en caso de que el comando que
#		llamo al mover no tiene log
#	2 tipo de mensaje
#	3 descripcion del mensaje
###############################################################################

function escribirLog(){
	if [ "$1" != "-" ]
	then
	local comando=`echo "$1" | sed 's/\(.*\)\(\..*[^\.]\)$/\1/'`
		Grabar_L "$comando" "$2" "$3"
	fi
}



function existe_archivo(){
	if [ -f "$1" ];	then
     return 1
	fi
return 0
}

	
function existe_directorio(){
	if [ -d "$1" ];	then
     return 1
  	fi
return 0
}



#si existe me devuelve 1
#si no existe me devuelve 0
function existe_duplicado(){
	local nom_arch=`basename "$1"` #obtnego nombre del archivo
	local buscar_en="$2/$nom_arch"

	existe_archivo "$buscar_en"
	return $?
}

###############################################################################
# Funcion directDup
#
# verifica si existe una carpeta llamada dup en el directorio pasado por parametro
#
# Si no existe esa carpeta, se crea.
###############################################################################

function crear_direct_dup(){
	local direct="$1/dup"
	if [ ! -d "$direct" ]
	then
		mkdir -p "$direct"
	fi
}

function cambiar_nombre(){
	return "$1"
}




validarCantParametros $#

# creo una variable para log saber si tengo que escribir o no en un archivo log

log="-"

if [ $# -eq 3 ]
then
	log="$3"
fi


origen="$1"
destino="$2"

nombre=`basename "$origen"` #me da el nombre del archivo 

destinoOrigen "$origen" "$destino" "$log"


existe_archivo "$origen"
if [ $? -eq 0 ]
then
	echo "El archivo \"$origen\" que se quiere mover no existe!"
	escribirLog "$log" "E" "Mover fallido: el archivo $origen no se puede mover porque no existe"		
	exit 2
fi
existe_directorio "$destino"
if [ $? -eq 0 ]
then
	escribirLog "$log" "E" "Mover fallido: el directorio destino $destino no existe"
	exit 4
fi


existe_duplicado "$origen" "$destino"

if [ $? -eq 0 ]
then	
	#si no hay un archivo igual
	#muevo el archivo 
	mv "$origen" "$destino"
else
	#si no esta creado creo el directorio dup
	#cambio nombre agregando la cantidad de archivos en la carpeta dup
	#muevo el archivo

	crear_direct_dup "$destino"
	destino_dup="$destino/dup/"

	cant_arch=`find "$destino_dup" -maxdepth  1 -type f | wc -l` #cuento la cantidad de archivos
	cant_arch=`echo "$cant_arch + 1" | bc -l` #le sumo uno para que empiece a contar desde 1

	nnn=`printf "%03d" $cant_arch`
	arch_dup="$destino_dup$nombre.$nnn"

	mv "$origen" "$arch_dup"

fi
